package Calculator;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;

import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;

public class Calculator2 extends JFrame implements ActionListener{
	private static final long serialVersionUID = 1L;
	private JTextField tf; // 设置文本输入框对象
	private boolean isNew = true;
	private double s = 0;
	private String preop = "+";
	private JTextField tfd;
	private boolean islx = false;


	public Calculator2() {
		Font fon = new Font("微软雅黑", Font.BOLD, 24); // 设置字体格式
		setTitle("计算器");// 新建主界面
		setVisible(true);
		setSize(500, 400);
		setLocation(500, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		// 新建中间容器（top）
		JPanel top = new JPanel();
		top.setLayout(new BorderLayout());
		tfd = new JTextField("0");
		tfd.setFont(fon);
		tfd.setEnabled(false);
		tfd.setDisabledTextColor(Color.BLUE);
		tfd.setHorizontalAlignment(JTextField.RIGHT);
		tf = new JTextField("0");
		tf.setFont(fon); // 调用设置的字体格式
		tf.setEnabled(false); // 设置文本框不可用后文本框颜色才起作用
		tf.setDisabledTextColor(Color.BLUE); // 设置文本框输入的字体蓝色
		tf.setHorizontalAlignment(JTextField.RIGHT);// 设置文本框对齐方式是右对齐
		JButton bt = new JButton("清除");
		bt.setFont(fon);
		bt.setBackground(new Color(0xFFFF00)); // 设置消除按钮的颜色
		bt.addActionListener(this); // 监听是否点击消除按钮
		top.add(tfd, BorderLayout.NORTH);
		top.add(tf, BorderLayout.CENTER);
		top.add(bt, BorderLayout.EAST);

		// 新建中间容器（center）
		JPanel center = new JPanel();
		center.setLayout(new GridLayout(4, 4));
		String[] str = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", ".", "0", "=", "/" };

		for (String s : str) {
			JButton ter = new JButton(s);
			ter.setFont(fon); // 调用设置的字体
			ter.setBackground(new Color(0x00F5FF)); // 设置按钮背景颜色
			ter.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); // 设置边框的类型
			ter.addActionListener(this); // 监听是否点击按钮
			center.add(ter);

		}
		add(top, BorderLayout.NORTH);
		add(center, BorderLayout.CENTER);

		// TODO Auto-generated constructor stub
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				new Calculator2();
			}
		});
	}

	@Override
	public void actionPerformed(ActionEvent e) { // 监听事件e.
		String cmd = e.getActionCommand(); // 创建对象（监听到的东西）
		if ("0.123456789+-*/=清除".indexOf(cmd) >= 0) {
			// tfd.setText(tfd.getText()+cmd);

			if ("0.123456789".indexOf(cmd) >= 0) { // 判断监听点击的按钮是否是"0.123456789+-*/="，如果是
				// tf.setText(tf.getText()+cmd);
				showNum(cmd); // 就调用showNum方法;

			} else if (cmd.equals("清除")) {
				reset(cmd);

			} else {
				computer(cmd);
			}
			showNumd(cmd);
		}
	}

	private void showNumd(String cmd) {
		// TODO Auto-generated method stub
		String yuand = tfd.getText();
		String str = String.valueOf(tfd.getText());
		if (yuand.indexOf(".") >= 0 && cmd.equals("."))
			return;	
		if(yuand.length()>1){
			String end=yuand.substring(yuand.length()-1, yuand.length());
			if("+-*/".indexOf(end)>=0&&"+-*/".indexOf(cmd)>=0){
				yuand=yuand.substring(0, yuand.length()-1);
			}
			
		}
		
		if(cmd.equals("清除")){
			tfd.setText("0");
			return;
		}
		
		
		if (cmd.equals("=")) {
			str = tf.getText();
			tfd.setText(str);
			return;
		}

		if (yuand.equals("0")) { // 如果文本框当前内容是0
			if (cmd.equals(".")) // 如果监听到当前输入的.输入
			{
				tfd.setText("0."); // 在文本框输出0.
			} else { // 否则在文本框输出当前值
				tfd.setText(cmd);
			}

		} else { // 否则文本框输出原来的值+当前输入的值
			tfd.setText(yuand + cmd);
		}

	}

	private void reset(String cmd) {

		tf.setText("0");
		tfd.setText("0");
		s = 0;
		preop = "+";
		isNew = true;
		islx = false;

	}

	private void computer(String cmd) {
		// TODO Auto-generated method stub
		isNew=true;
		if (islx == true) {
			preop = cmd;
			return;
		}
		double cur = Double.valueOf(tf.getText());

		switch (preop) {
		case "+":
			s += cur;
			break;
		case "-":
			s -= cur;
			break;
		case "*":
			s *= cur;
			break;
		case "/":
			s /= cur;
			break;

		}

		preop = cmd;
		String str = String.valueOf(s);
		if (str.endsWith(".0"))
			str = str.substring(0, str.length() - 2);
		if (str.equals("Infinity"))
			tfd.setText("除数不能为0");
		tf.setText(String.valueOf(str));
		// tfd.setText(String.valueOf(str));
		islx = true;
	}

	private void showNum(String cmd) {
		String yuan = tf.getText();
		// String yuand = tfd.getText();
		islx = false;
		if (isNew == true) {
			yuan = "0";
			isNew = false;
		}
		if (yuan.indexOf(".") >= 0 && cmd.equals("."))
			return;// 如果（获取文本框中有.&&当前监听到.输入则停止
		// if(yuand.indexOf(".")>=0&&cmd.equals(".")) return;
		// System.out.println(yuand+" === "+cmd);
		// if(yuand.equals("/")&&cmd.equals("0"))
		// {
		// tfd.setText("除数不能为0");
		// return;
		// }

		// if(yuand.equals("0")){ //如果文本框当前内容是0
		// if(cmd.equals(".")) //如果监听到当前输入的.输入
		// {
		// tfd.setText("0."); //在文本框输出0.
		// }else { //否则在文本框输出当前值
		// tfd.setText(cmd);
		// }
		//
		// }else{ //否则文本框输出原来的值+当前输入的值
		// tfd.setText(yuand+cmd);
		// }
		//

		if (yuan.equals("0")) { // 如果文本框当前内容是0
			if (cmd.equals(".")) // 如果监听到当前输入的.输入
			{
				tf.setText("0."); // 在文本框输出0.

			} else { // 否则在文本框输出当前值
				tf.setText(cmd);

			}

		} else { // 否则文本框输出原来的值+当前输入的值
			tf.setText(yuan + cmd);

		}

		// String yunsuan=tf.getText();
		// if(yunsuan.indexOf(".")>=0&&cmd.equals("."))
		// return;//如果（获取文本框中有.&&当前监听到.输入则停止
		// if(yunsuan.indexOf("=")>=0&&cmd.equals("=")) return;
		// if(tf.getText().indexOf("+")>=0&&cmd.equals("+")) return;
		// if(yunsuan.indexOf("-")>=0&&cmd.equals("-")) return;
		// if(yunsuan.indexOf("*")>=0&&cmd.equals("*")) return;
		// if(yunsuan.indexOf("/")>=0&&cmd.equals("/")) return;
		// if(yunsuan.equals("0123456789")&&cmd.equals("+-*/=")){
		// tf.setText(tf.getText()+cmd);
		//
		// if(yunsuan.indexOf("=")>=0&&cmd.equals("=")) return;
		//
		//
		// }
		// if(yunsuan.equals("+-*/=")){
		// tf.setText("先输入数字在输入运算符");
		// }

	}

}
